#ifndef __APP_MQTT_H__
#define __APP_MQTT_H__
#include "MQTTClient.h"
#include "log/log.h"
#include <string.h>
/**
 * @file App_mqtt.h
 * @brief 此头文件定义了 MQTT 相关的常量和函数声明，用于 MQTT 客户端的初始化、关闭、消息发送等操作。
 */

// 定义 MQTT 服务器的连接地址
#define ADDRESS "tcp://192.168.16.46:1883"
// 定义 MQTT 客户端的唯一标识符
#define CLIENTID "b275ba38-daf6-4b37-984f-5d8fdc6a1cfb"
// 定义远程到网关的 MQTT 主题
#define TOPIC_RTG "remote_to_gateway"
// 定义网关到远程的 MQTT 主题
#define TOPIC_GTR "gateway_to_remote"
// 定义 MQTT 服务质量等级，1 表示至少送达一次
#define QOS 1
// 定义 MQTT 操作的超时时间，单位为毫秒
#define TIMEOUT 10000L

/**
 * @brief 初始化 MQTT 客户端。
 * 
 * 该函数用于完成 MQTT 客户端的初始化工作，包括连接到 MQTT 服务器等操作。
 * @return 初始化成功返回 0，失败返回非 0 值。
 */
int App_mqtt_Init(void);

/**
 * @brief 关闭 MQTT 客户端连接。
 * 
 * 该函数用于断开 MQTT 客户端与服务器的连接，并释放相关资源。
 */
void App_mqtt_Close(void);

/**
 * @brief 向 MQTT 服务器发送 JSON 格式的消息。
 * 
 * 该函数将指定的 JSON 字符串发送到 MQTT 服务器。
 * @param json 指向要发送的 JSON 字符串的指针。
 * @return 发送成功返回 0，失败返回非 0 值。
 */
int App_mqtt_Send(char *json);

/**
 * @brief 注册 MQTT 消息接收回调函数。
 * 
 * 该函数用于注册一个回调函数，当 MQTT 客户端接收到消息时会调用该回调函数。
 * @param callback 指向回调函数的指针，该回调函数接受一个 JSON 字符串指针作为参数，返回一个整数。
 */
void App_mqtt_RegisterRecvCallback(int (*callback)(char *json));

#endif /* __APP_MQTT_H__ */
